home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Software 2000
/
Software 2000 Volume 1 (Disc 1 of 2).iso
/
utilities
/
u283.dms
/
u283.adf
/
replay2b.asm
< prev
next >
Wrap
Assembly Source File
|
1995-07-23
|
9KB
|
553 lines
section Sfx,code_c
opt c-
; ©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©
; © Sound FX 1.8 replay - NO INTERRUPT - Devpac ][. ©
; © Coded by Kerni of Magnetic Fields (C) 1991. ©
; © RASTER TIME = $2c-$40 (21 raster lines) ©
; ©-------------------------------------------------©
; ©This player was rewritten so that it can be used ©
; © in demos by calling it each frame as with the ©
; © Noisetracker & Soundtracker replay routines ©
; © The original version ran under a lev6 interrupt ©
; © (!) this version needs the following info.... ©
; © Speed of Song: Change 'Speed' to speed of song ©
; © call 'SfxStart' once, 'SfxPlay' every frame and ©
; © 'SfxStop' to end music, Datas at 'SfxDatas' !! ©
; ©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©
bsr SfxStart
Test: ;move.l $dff004,d2
;and.l #$0001ff00,d2
;cmp.l #$00001000,d2
;bne.s Test
cmp.b #200,$dff006
bne.s test
; move.w #$00f,$dff180
bsr SfxPlay
; move.w #$000,$dff180
Mouse: btst #6,$bfe001
bne Test
End: bsr SfxStop
bclr #1,$bfe001
moveq #0,d0
rts
SfxStart:
bset #1,$bfe001
; move.l 4,a6
; move.l SongPointer,a1
; jsr -534(A6)
; move.l #SfxDatas,d0
; addq.l #4,d0
; moveq #2,d1
; jsr -198(a6)
moveq #-1,d5
move.l d0,a1
move.l Songpointer,a0
move.l #SfxDatas,d1
addq.l #4,d1
lsr.l #2,d1
subq #1,d1
move.l SongPointer,a0
add #60,a0
move.b 470(a0),AnzPat+1
move 4(A0),DelayValue
bsr SongLen
add.l d0,a0
add.w #600,a0
move.l SongPointer,a2
lea Instruments,a1
moveq #14,d7
CalcIns:
move.l a0,(A1)+
add.l (a2)+,a0
dbf d7,CalcIns
; lea CiaaResource,a1
; moveq #0,d0
; jsr -498(A6)
; move.l d0,CiaaBase
; move.l d0,a6
jsr PlayDisable
jsr PlayInit
jsr PlayEnable
jsr InitTimer
rts
SfxPlay:
movem.l d0-d7/a0-a6,-(SP)
addq.w #1,Timer
; move.w speed,d7
cmp.w #speed,Timer
bne CheckEffects
clr.w Timer
bsr PlaySound
movem.l (SP)+,d0-d7/a0-a6
rts
SfxStop:
clr.l $dff0a8
clr.l $dff0b8
clr.l $dff0c8
clr.l $dff0d8
rts
SongLen:
movem.l d1-d7/a0-a6,-(SP)
move.l SongPointer,a0
lea 532(A0),a0
move AnzPat(pc),d2
subq #1,d2
moveq #0,d1
moveq #0,d0
SongLenLoop:
move.b (a0)+,d0
cmp.b d0,d1
bhi.s LenHigher
move.b d0,d1
LenHigher:
dbf d2,SongLenLoop
move.l d1,d0
addq #1,d0
mulu #1024,d0
movem.l (SP)+,d1-d7/a0-a6
rts
InitTimer:
; move.b #%10000001,$bfee01
; lea DelayValue(pc),a1
; move.b 1(a1),$bfe401
; move.b 0(a1),$bfe501
rts
PlayInit:
lea Instruments(pc),a0
moveq #14,d7
InitLoop:
move.l (A0)+,a1
clr.l (A1)
dbf d7,InitLoop
rts
PlayEnable:
lea $dff000,a0
move.w #-1,PlayLock
clr $a8(A0)
clr $b8(A0)
clr $c8(a0)
clr $d8(a0)
clr.w Timer
clr.l TrackPos
clr.l PosCounter
rts
PlayDisable:
lea $dff000,a0
clr.w PlayLock
clr $a8(a0)
clr $b8(a0)
clr $c8(a0)
clr $d8(a0)
move.w #$f,$96(A0)
rts
IntCode:
bsr SfxPlay
moveq #0,d0
rts
CheckEffects:
moveq #3,d7
lea StepControl0,a4
lea Channel0(pc),a6
lea $dff0a0,a5
EffLoop:
movem.l d7/a5,-(SP)
bsr.s MakeEffects
movem.l (Sp)+,d7/a5
NoEff:
add #8,a4
add #$10,a5
add #22,a6
dbf d7,EffLoop
movem.l (a7)+,d0-d7/a0-a6
rts
MakeEffects:
move (A4),d0
beq.s NoStep
bmi.s StepItUp
add d0,2(A4)
move 2(A4),d0
move 4(A4),d1
cmp d0,d1
bhi.s StepOk
move d1,d0
StepOk:
move d0,6(a5)
move D0,2(A4)
rts
StepItUp:
add d0,2(A4)
move 2(A4),d0
move 4(A4),d1
cmp d0,d1
blt.s StepOk
move d1,d0
bra.s StepOk
NoStep:
move.b 2(a6),d0
and.b #$0f,d0
cmp.b #1,d0
beq Arpeggio
cmp.b #2,d0
beq pitchbend
cmp.b #7,d0
beq.s SetStepUp
cmp.b #8,d0
beq.s SetStepDown
rts
SetStepUp:
moveq #0,d4
StepFinder:
clr (a4)
move (A6),2(a4)
moveq #0,d2
move.b 3(a6),d2
and #$0f,d2
tst d4
beq.s NoNegIt
neg d2
NoNegIt:
move d2,(a4)
moveq #0,d2
move.b 3(a6),d2
lsr #4,d2
move (a6),d0
lea NoteTable,a0
StepUpFindLoop:
move (A0),d1
cmp #-1,d1
beq.s EndStepUpFind
cmp d1,d0
beq.s StepUpFound
addq #2,a0
bra.s StepUpFindLoop
StepUpFound:
lsl #1,d2
tst d4
bne.s NoNegStep
neg d2
NoNegStep:
move (a0,d2.w),d0
move d0,4(A4)
rts
EndStepUpFind:
move d0,4(A4)
rts
SetStepDown:
st d4
bra.s StepFinder
StepControl0:
dc.l 0,0
StepControl1:
dc.l 0,0
StepControl2:
dc.l 0,0
StepControl3:
dc.l 0,0
Arpeggio:
lea ArpeTable,a0
moveq #0,d0
move Timer,d0
subq #1,d0
lsl #2,d0
move.l (A0,d0.l),a0
jmp (A0)
Arpe4: lsl.l #1,d0
clr.l d1
move.w 16(a6),d1
lea.l NoteTable,a0
Arpe5: move.w (a0,d0.l),d2
cmp.w (a0),d1
beq.s Arpe6
addq.l #2,a0
bra.s Arpe5
Arpe1: clr.l d0
move.b 3(a6),d0
lsr.b #4,d0
bra.s Arpe4
Arpe2: clr.l d0
move.b 3(a6),d0
and.b #$0f,d0
bra.s Arpe4
Arpe3: move.w 16(a6),d2
Arpe6: move.w d2,6(a5)
rts
Pitchbend:
clr.l d0
move.b 3(a6),d0
lsr.b #4,d0
tst.b d0
beq.s pitch2
add.w d0,(a6)
move.w (a6),6(a5)
rts
Pitch2: clr.l d0
move.b 3(a6),d0
and.b #$0f,d0
tst.b d0
beq.s pitch3
sub.w d0,(a6)
move.w (a6),6(a5)
Pitch3: rts
PlaySound:
move.l SongPointer(pc),a0
add #60,a0
move.l a0,a3
move.l a0,a2
lea 600(A0),a0
add #472,a2
add #12,a3
move.l TrackPos(pc),d0
clr.l d1
move.b (a2,d0.l),d1
moveq #10,d7
lsl.l d7,d1
add.l PosCounter,d1
clr.w DmaCon
lea StepControl0,a4
lea $dff0a0,a5
lea Channel0(pc),a6
moveq #3,d7
lea datas(pc),a2
SoundHandleLoop:
bsr PlayNote
add #8,a4
add.l #$10,a5
add.l #22,a6
dbf d7,SoundHandleLoop
lea datas(pc),a2
lea equals(pc),a3
move.l #0,(a3)
move.l #0,4(a3)
move.w #3,d7
Dowot:
move.l (a2)+,a5
move.l (a2)+,a6
cmp.l #dummyarea,a5
beq.s OobyDooby
move.w (a2),(a3)
OobyDooby:
addq.w #2,a2
addq.w #2,a3
cmp #-2,(A6)
bne.s NoStop
clr 8(A5)
bra Super
NoStop:
move.l 4(a6),0(a5)
move.w 8(a6),4(a5)
move.w 0(a6),6(a5)
Super:
move.w 20(a6),d0
or.w d0,DmaCon
dbf d7,dowot
move DmaCon(pc),d0
bset #15,d0
move.w d0,$dff096
move #50,d0 *******300
Delay2:
dbf d0,Delay2
lea Channel3(pc),a6
lea $dff0d0,a5
moveq #3,d7
SetRegsLoop:
move.l 10(A6),(a5)
move 14(A6),4(A5)
NoSetRegs:
sub #22,a6
sub #$10,a5
dbf d7,SetRegsLoop
tst PlayLock
beq.s NoEndPattern
add.l #16,PosCounter
cmp.l #1024,PosCounter
blt.s NoEndPattern
clr.l PosCounter
addq.l #1,TrackPos
NoAddPos:
move.w Anzpat(pc),d0
move.l TrackPos(pc),d1
cmp.w d0,d1
bne.s NoEndPattern
clr.l TrackPos
NoEndPattern:
rts
datas: dc.l 0,0
dc.w 0
dc.l 0,0
dc.w 0
dc.l 0,0
dc.w 0
dc.l 0,0
dc.w 0
equals: dc.w 0,0,0,0
PlayNote:
clr.l (A6)
tst PlayLock
beq NoGetNote
move.l (a0,d1.l),(a6)
NoGetNote:
addq.l #4,d1
clr.l d2
cmp #-3,(A6)
beq NoInstr2
move.b 2(a6),d2
and.b #$f0,d2
lsr.b #4,d2
tst.b d2
beq NoInstr2
clr.l d3
lea.l Instruments(pc),a1
move.l d2,d4
subq #1,d2
lsl #2,d2
mulu #30,d4
move.l (a1,d2.w),4(a6)
move.w (a3,d4.l),8(a6)
move.w 2(a3,d4.l),18(a6)
move.w 4(a3,d4.l),d3
tst d3
beq.s NoRepeat
move.l 4(a6),d2
add.l d3,d2
move.l d2,10(a6)
move.w 6(a3,d4),14(a6)
move.w 18(a6),d3
bra.s NoInstr
NoRepeat:
move.l 4(a6),d2
add.l d3,d2
move.l d2,10(a6)
move.w 6(a3,d4.l),14(a6)
move.w 18(a6),d3
NoInstr:
move.b 2(A6),d2
and #$0f,d2
cmp.b #5,d2
beq.s ChangeUpVolume
cmp.b #6,d2
bne SetVolume2
moveq #0,d2
move.b 3(A6),d2
sub d2,d3
tst d3
bpl SetVolume2
clr d3
bra SetVolume2
ChangeUpVolume:
moveq #0,d2
move.b 3(A6),d2
add d2,d3
tst d3
cmp #64,d3
ble SetVolume2
move #64,d3
SetVolume2:
move d3,8(A5)
NoInstr2:
cmp #-3,(A6)
bne.s NoPic
clr 2(A6)
bra.s NoNote
NoPic:
tst (A6)
beq.s NoNote
clr (a4)
move.w (a6),16(a6)
move.w 20(a6),$dff096
; move #50,d7 *********300
;Delay1:
; dbf d7,Delay1
move.l a5,(a2)+
move.l a6,(a2)+
move.w d3,(a2)+
rts
NoNote:
move.l #dummyarea,(a2)+
move.l #dummyarea,(a2)+
move.w d3,(a2)+
rts
dummyarea:
dcb.l 100,0
ArpeTable:
dc.l Arpe1
dc.l Arpe2
dc.l Arpe3
dc.l Arpe2
dc.l Arpe1
Channel0:
dcb.l 5,0
dc.w 1
Channel1:
dcb.l 5,0
dc.w 2
Channel2:
dcb.l 5,0
dc.w 4
Channel3:
dcb.l 5,0
dc.w 8
Instruments:
dcb.l 15,0
PosCounter:
dc.l 0
TrackPos:
dc.l 0
Timer:
dc.w 0
DmaCon:
dc.w 0
AnzPat:
dc.w 1
PlayLock:
dc.w 0
DelayValue:
dc.w 14565
SongPointer:
dc.l LenghtTable
Reserve:
dc.w 856,856,856,856,856,856,856,856,856,856,856,856
NoteTable:
dc.w 856,808,762,720,678,640,604,570,538,508,480,453
dc.w 428,404,381,360,339,320,302,285,269,254,240,226
dc.w 214,202,190,180,170,160,151,143,135,127,120,113
dc.w 113,113,113,113,113,113,113,113,113,113,113,113
dc.w -1
LenghtTable:
Songstr equ lenghttable+60
Speed: equ 6
SfxDatas:
incbin "df0:sfx.cubik(loudremix)"
even